跳至主要内容

Linode 架站流程紀錄

每次都忘了記,藉這次機會來記錄一下,用 Linode(Akamai) 要怎麼架站。

先說,我知道靜態網站可以用更簡單的方式,像現在 Linode 有 Object Storage 的方案,或是其他平台主機商也有提供更快速的解決方案。

不過我過去用以下這種方式,才真的比較接觸到 Linux 的有趣之處,所以這次考量後,還是使用這個流程,並且記錄下來。

除了這個網站 郊郊郊狼 外,我的主要創作網站 野火堆,也是用這個方式架成的。

這邊只講流程,沒有要解釋太多的意思,一邊研究一邊架站也是樂趣之一。

一些基本資料和備註:

  • 本地端電腦 (Win11 + Powershell)
  • Linode 的方案 (這次用 Shared CPU - Nanode 1 GB 方案,每月 5 美金,OS 為 Ubuntu)
  • ssh key 我已經先做好了
  • 我都是看英文資源,所以要跟以下流程,需要有一定英文基礎
  • 這流程是用在靜態網站架設,如果你要用有資料庫的那種,例如 Wordpress,還需要另外安裝資料庫喔!
  • 如果你是純小白,這可能會花上你好幾個小時,這很正常。這個流程我做過 3 次,這次還是花了 3-4 小時左右(邊寫邊紀錄),理想上應該 1 小時可以完成
  • 如果你要架好幾個網站(不同域名/子域名),可以只買一個方案,然後域名跟 Nginx 那邊要再多設定,這邊先不講了。我是習慣分開方案經營就是了。

linode 設定流程:​

設定與建立 Linode (現在叫 Akamai)​

  1. 建立 Linode,選方案跟 root PW

設定與更新 linux​

  1. 使用 ssh 連線,準備更新系統。通常我選 Ubuntu

    sudo apt update && apt upgrade
  2. 設定系統 地區 時區

    dpkg-reconfigure tzdata
  3. 設定 自訂 hostname example-hostname

    example-hostname 改成想要的名字,這樣登入時,localhost 會變成自訂名字。

    例如本來是,root@localhost,會變成 root@example

  4. 更新 host 檔案

    nano /etc/hosts

    加入後面兩行,還有剛剛自己的設定的 host name,X 的部分,Linode 買完方案後會提供 ip,請複製貼上

    127.0.0.1 localhost.localdomain localhost

    (新增以下兩行)

    XXX.X.XXX.XX example-hostname.example.com example-hostname

    XXXX:XXXX::XXXX:XXXX:XXXX:XXXX example-hostname.example.com example-hostname
  5. 建立新使用者,example_user 為自訂名稱,請修改

    adduser example_user
  6. 將剛新增的使用者賦予 sudo 權限

    adduser sudo example_user

    登出後就可以用使用者作 ssh 登入。 像這樣

    ssh example_user@xxx.xxx.xxx.xxx

設定 SSH KEY​

  1. 登入新增是使用者後,建立放 ssh key 資料夾

    mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/

    我已經有自己產生 key,所以這邊是直接傳公鑰到你的遠端主機,本地端請保留私鑰

    Win11 可以用 Openssh 來產生鑰匙,相關教學請自己查閱最下方官方文件連結,這邊只講流程

    注意: Windows 的 Powershell 沒辦法直接用下面的範例,C 槽會判定成無效 host name。

    scp C:\Users\MyUserName\.ssh/id_rsa.pub example_user@XXX.X.X.XXX:~/.ssh/authorized_keys

    解決辦法是,直接 cd 到 public key 所在資料夾,再用 scp 來傳

    cd ./.ssh
    scp id_ed25519.pub example_user@XXX.XXX.XXX.XXX:~/.ssh/authorized_keys
  2. 修改剛上傳至主機的 public key 權限

    sudo chmod -R 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
  3. 登出,使用新增使用者登入,若是初次應該會要求 passphrase 要設定

  4. 設定禁止 root 登入

    sudo nano /etc/ssh/sshd_config

    config 中,PermitRootLogin 修改成 no

    # Authentication:
    ...
    PermitRootLogin no

安裝防火牆 UFW​

  1. 允許 ssh

    sudo ufw allow ssh
  2. http port 80,以及 https 443

    sudo ufw allow 80/tcp
    sudo ufw allow http/tcp
    sudo ufw allow 443
  3. 好了之後可以用 enable 查看,或是用 status 看目前加入的白名單

    sudo ufw enable
    sudo ufw status

安裝並設定 Nginx​

  1. 安裝 Nginx

    sudo apt install nginx

    確認狀態,順利運行的話,下一步

    sudo systemctl status nginx
  2. 還沒掛域名的情況下,直接用 ip 例如 http://192.0.2.0,應該會看到 Nginx 首頁

  3. unlink 預設 conf 檔案

    sudo unlink /etc/nginx/sites-enabled/default
  4. 在 sites-available 底下建立自訂域名的 conf 檔案

    sudo touch /etc/nginx/sites-available/example.com

    記得不用加 .conf 副檔名

  5. 然後編輯該 conf 檔

    sudo nano /etc/nginx/sites-available/example.com

    貼上,example.com 要改成自己的網域

    server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    root /var/www/example.com;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }
  6. 使用串聯指令

    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  7. 測試 conf 檔輸入正確,正確會顯示 Success

    sudo nginx -t
  8. 有成功就重啟

    sudo systemctl restart nginx
  9. conf 有指定 root index 檔案,所以要建立相關資料夾

    sudo mkdir /var/www/example.com
  10. 確保 前面新增的使用者可以在 Filezilla 傳輸,記得變更權限

    sudo chown -R example_user /var/www/example.com/

    因為只需要上傳網站到/var/www/example.com/,所以只指定這個資料夾的權限

  11. 使用 Cerbot 跑 SSL 流程比較簡單, Cerbot 會幫你把該網域的 nginx conf 檔加入 443,這樣才能處理 https,也可以再一開始設定網站 conf 檔時就加入。

    另外憑證位置跟自動續約,按照 cerbot 步驟,都會幫你處理好。

    這裡不多說明,基本上就是在 Cerbot 選好你的主機 OS 跟 Nginx,接下來按網站步驟走就好。

其他​

  • Linode 要記得加入你的域名,要記得設定 A/AAAA Record
  • 域名商 那邊要設 DNS,設定方式從 linode 那邊拿
  • 記得 UFW 也要加入 443,sudo ufw allow 443,要不然網址連過去會出現 ERR_CONNECTION_TIMED_OUT

參考來源,來自 Linode 官方文件,詳細說明可以直接在網站看:

https://techdocs.akamai.com/cloud-computing/docs/set-up-and-secure-a-compute-instance

https://www.linode.com/docs/guides/configure-firewall-with-ufw/

https://www.linode.com/docs/guides/how-to-install-and-use-nginx-on-ubuntu-20-04/